package jrain.fw.script.operator;

import jrain.fw.script.tools.ELException;
import jrain.fw.script.tools.Logger;

//除法操作
public class DivideOperator extends BinaryOperator {

	public static final DivideOperator SINGLETON = new DivideOperator();

	public DivideOperator() {
	}

	public String getOperatorSymbol() {
		return "/";
	}

	public Object apply(Object pLeft, Object pRight, Object pContext, Logger pLogger) throws ELException {
		if (pLeft == null && pRight == null) {
			if (pLogger.isLoggingWarning()) {
				pLogger.logWarning(Constants.ARITH_OP_NULL, getOperatorSymbol());
			}
			return PrimitiveObjects.getInteger(0);
		}

		double left = Coercions.coerceToPrimitiveNumber(pLeft, Double.class, pLogger).doubleValue();
		double right = Coercions.coerceToPrimitiveNumber(pRight, Double.class, pLogger).doubleValue();

		try {
			return PrimitiveObjects.getDouble(left / right);
		} catch (Exception exc) {
			if (pLogger.isLoggingError()) {
				pLogger.logError(Constants.ARITH_ERROR, getOperatorSymbol(), "" + left, "" + right);
			}
			return PrimitiveObjects.getInteger(0);
		}
	}

}
